gl renderer: Fix rounded rect intersection code
authorTimm Bäder <mail@baedert.org>
Sun, 2 Jun 2019 06:31:44 +0000 (08:31 +0200)
committerTimm Bäder <mail@baedert.org>
Sun, 2 Jun 2019 06:31:44 +0000 (08:31 +0200)
Test case attached.

Fixes #1920

gsk/gl/gskglrenderer.c
testsuite/gsk/compare/clip-nested1.node [new file with mode: 0644]
testsuite/gsk/compare/clip-nested1.png [new file with mode: 0644]
testsuite/gsk/meson.build

index 98e28a80341241c75361d5a2aba478bdf9327ea3..c5d5918eac868cd4cda0e40c86a30ee6047cd007 100644 (file)
@@ -1072,13 +1072,14 @@ gsk_rounded_rect_intersection (const GskRoundedRect *outer,
   gboolean contained_x;
   gboolean contained_y;
 
-  if (graphene_rect_contains_rect (outer_bounds, inner_bounds))
+  get_inner_rect (outer, &outer_inner);
+
+  if (graphene_rect_contains_rect (&outer_inner, inner_bounds))
     {
       *out_intersection = *inner;
       return TRUE;
     }
 
-  get_inner_rect (outer, &outer_inner);
   get_inner_rect (inner, &inner_inner);
 
   contained_x = outer_inner.origin.x <= inner_inner.origin.x &&
diff --git a/testsuite/gsk/compare/clip-nested1.node b/testsuite/gsk/compare/clip-nested1.node
new file mode 100644 (file)
index 0000000..0e269ab
--- /dev/null
@@ -0,0 +1,48 @@
+transform {
+transform: scale(8);
+child:container {
+
+rounded-clip {
+  clip: 0 0 50 50 / 30 0 0 0;
+  child: rounded-clip {
+    clip: 0 0 100 100 / 0;
+    child: color {
+      bounds: 0 0 50 50;
+      color: teal;
+    }
+  }
+}
+
+debug {
+  message: "Clipped-out area";
+  child: container {
+     color {
+       color: black;
+       bounds: 0 16 5 14;
+     }
+     color {
+       color: black;
+       bounds: 3 12 5 5;
+     }
+     color {
+       color: black;
+       bounds: 6 7 5 5;
+     }
+     color {
+       color: black;
+       bounds: 10 3 5 5;
+     }
+     color {
+       color: black;
+       bounds: 15 0 5 5;
+     }
+     color {
+       color: black;
+       bounds: 19 0 14 2;
+     }
+  }
+}
+
+
+}
+}
\ No newline at end of file
diff --git a/testsuite/gsk/compare/clip-nested1.png b/testsuite/gsk/compare/clip-nested1.png
new file mode 100644 (file)
index 0000000..3b1e4cc
Binary files /dev/null and b/testsuite/gsk/compare/clip-nested1.png differ
index f2bc21b920ceceec18e756167d7f53264d13fdd5..a8aac553d85f2a366d04ac7dbe0d2e2a6853b5a3 100644 (file)
@@ -54,6 +54,8 @@ compare_render_tests = [
   'scaled-cairo',
   'shadow-in-opacity',
   'texture-url',
+  'color-matrix-identity',
+  'clip-nested1',
 ]
 
 renderers = [